package day05;

import java.util.Arrays;

//数组的演示
public class ArrayDemo {
    public static void main(String[] args) {
        //1）数组的定义：
        //声明整型数组a，包含5个元素，每个元素都是int类型，默认值为0
        int[] a = new int[5];
        //声明浮点型数组d，包含10个元素，每个元素都是double类型，默认值为0.0
        double[] d = new double[10];
        //声明布尔型数组吧，包含26个元素，每个元素都是boolean类型，默认值为false
        boolean[] b = new boolean[26];

        //2）数组的初始化：初始化数组中的元素
        int[] arr1 = new int[3];        //0,0,0
        int[] arr2 = {2,5,8};           //2,5,8
        int[] arr3 = new int[]{2,5,8};  //2,5,8
        int[] arr4;
        ///arr4 = {2,5,8};              //编译错误，此方式只能声明同时初始化
        arr4 = new int[]{2,5,8};        //正确

        //3）数组的访问：访问的是数组中的元素
        int[] arr = new int[3];
        System.out.println("数组的长度为："+arr.length);   //3
        System.out.println("数组第一个元素为："+arr[0]);    //0
        arr[0] = 100;   //给第一个元素赋值为100
        arr[1] = 200;   //给第二个元素赋值为200
        arr[2] = 300;   //给第三个元素赋值为300
        //arr[3] = 400; //运行时会发生数组下标越界异常
        System.out.println(arr[2]);             //300，输出最后一个元素的值
        System.out.println(arr[arr.length-1]);  //300，输出最后一个元素的值
        System.out.println("-----------------------------------");
        //4）数组的遍历：从头到尾挨个走一遍
        int[] arr5 = new int[10];
        for(int i=0;i<arr5.length;i++){         //遍历arr数组
            arr5[i]=(int)(Math.random()*100);   //给每个元素赋值为0到99的随机数
            System.out.println(arr5[i]);        //输出每个元素的值
        }
        System.out.println("----------------------------------");
        //5）数组的复制：
        int[] a1 = {9,8,7,6,5};
        int[] b1 = new int[8];
        /*
        a1:源数组
        2:源数组下标
        b1:目标数组
        3:目标数组下标
        2:要复制的元素长度
         */
        System.arraycopy(a1,2,b1,3,2);
        for (int i=0;i<b1.length;i++){
            System.out.println(b1[i]);
        }
        System.out.println("----------------------------------");
        int[] a2 = {10,20,30,40,50};
        /*
        a：源数组
        b：目标数组
        6：目标数组长度
            若目标数组长度>源数组长度，则末尾补默认值
            若目标数组长度<源数组长度，则将末尾的截掉
         */
        int[] b2 = Arrays.copyOf(a2,6);   //灵活性差
        for (int i=0;i<b2.length;i++){
            System.out.println(b2[i]);
        }
        System.out.println("----------------------------------");
    }
}
